
//275.H指数II
class Solution {

    //h表示论文被应用的次数
    bool check(vector<int>& nums,int h)  
    {
        int n=nums.size();
        int pos=ranges::lower_bound(nums,h)-nums.begin();
        //判断是否有h个值满足条件
        return n-pos>=h;
    }

public:
    int hIndex(vector<int>& citations) {
        //数据是有序的，可以通过二分来进行查找
        int n=citations.size();
        int left=0,right=citations[n-1]+1;
        while(left+1<right)
        {
            int mid=left+(right-left)/2;
            if(check(citations,mid)) left=mid;
            else right=mid;
        }
        return left;
    }
};